// 数组主要是用来存储一组数据的
//创建数组的基本2种方式：1使用Array构造函数，new Array（）()预先知道数组要保存的项目数量，向Array构造函数中传递数组应包含的项
// var colors = new Array(3);
// console.log(colors)
// console.log(colors.length)
// var num = new Array(1,2,3)
// console.log(num)

// //字面量，数组中的每一个值对类型没有限制
// var cols =["red","blue","green"]
// console.log(cols)

//数组元素的读写
//读取和设置值时，使用方括号[]并提供相应的索引
//索引是从0开始的正整数

//数组长度
//array.length 获取数组array的长度 number
//通过设置length可从数组的末尾移除项或向数组中添加新项
//把一个值放在超出当前数组大小的位置上时，会重新计算数组长度值，长度值等于最后一项索引加一
// var arr = ["a","b"];
// arr[99]="z"
// console.log(arr.length)
//数组的遍历

//数组的栈方法：
//1.push() 2.unshift() 3.pop() 4.shift()
//push()功能：把它的参数顺序添加到arrayObject的尾部。返回值：把指定的值添加到数组后的新长度
var arr = [1, 2, 3, 4, 5];
// console.log(arr.push(6,7,8))//8
// console.log(arr)//[ 1, 2, 3, 4,  5, 6, 7, 8]
//unshift 功能：把它的参数顺序添加到arrayObject的开头。返回值：把指定的值添加到数组后的新长度
// console.log(arr.unshift(-1,0))
// console.log(arr)

//shift()删除arrayObject中的第一个元素 返回值：被删除的那个元素
// console.log(arr.shift())
// console.log(arr)

//pop()删除arrayObject中的最后一个元素，返回值：被删除的那个元素

//join() 功能：用于把数组中的所有元素放入一个字符串 返回字符串 返回字符串
// var nums=[2,4,5]
// var str = nums.join()
// console.log(str)
// var words = ["border",'left','color']
// var woedstr = words.join("-");
// console.log(woedstr)

//reverse()功能：用于颠倒数组中元素的顺序 返回数组
// var nums=[21,4,6,7,53]
// console.log(nums.reverse().join(""))

//sort()功能：用于对数组的元素进行排序，返回数组 说明：
//1.即使数组中的每一项都是数值，sort（）方法比较的也是字符串
//2.sort（）方法可以接收一个比较函数作为参数
//降序
// console.log(nums.sort(function (a,b) {
//   return b-a
// }))
//升序
// console.log(nums.sort(function (a,b) {
//   return a-b
// }))

//concat() 功能：用于连接两个或多个数组 返回值：数组
// var arr1 = ["a","b","c"]
// var arr2 = ['e','f','g']
// console.log(arr1.concat(arr2,[11,12]))

// slice() 功能：从已有的数组中返回选定的元素
//参数：start（必需的）规定从何处开始选取，如是负数，从数组尾部开始算起
//end（可选）规定从何处结束选取，是数组片段结束处的数组下标
//补充：start和end指的是数组中的索引值。2，截取从start到end（不包含该元素）的元素，既从start到end-1的元素
// 说明1.如没指定end。切分的数组包含从start到数组结束的所有元素
//2.如slice（）方法的参数中有一个负数，则用数组长度加上该数来确定相应的位置 返回数组
// var colors = ["red","green","blue",'yellow']
// var newColors=colors.slice(1)
// var newColors=colors.slice(1,3)
// var newColors=colors.slice(-1,4)//3 3
// var newColors1=colors.slice(3,4)
// console.log(newColors)
// console.log(newColors1)

//完成以下代码段，实现b数组对a数组的拷贝，方法越多越好
// var a = [1,"bug",'ok',7]
// 方法一
// var b = new Array()
// for(i = 0;i<a.length;i++){
//   b.push(a[i])
// }
// console.log(b)
// 方法二
// b=[].concat(a)
// console.log(b)
//方法三
// b=a.slice(0)
// console.log(b)

//splice()最强大的方法 提供删除插入替换方法
//功能：删除从index处开始的零个或多个元素 返回值含有被删除的元素的数组
//说明：count是要删除的项目数量，如果设置为0，则不会删除项目
//如果不设置。则删除从index开始的所有值
//删除
// var arr = ["a","b","c","d","e","f","g"]
// var delArr = arr.splice(2,0)
// console.log(arr)
// console.log(delArr)
//插入
// index:起始位置(之前插入) 0：要删除的项数 itme1...要插入的项
// var inArr = arr.splice(7,0,"h","i")
// console.log(arr)
// console.log(inArr) ''
//替换
// var changeArr = arr.splice(0,2,"A","B")
// console.log(arr)
// console.log(changeArr)
// var inArr = arr.splice(0,0,"a","b")
// console.log(arr)
// var newArr = arr.splice(2,2)
// console.log(newArr)
// console.log(arr)

// ES5
// indexOf()从数组的开头（位置0）开始向后查找
// 参数：searchvalue：必需，要查找的项 返回值number 查找的项在数组中的位置，没有找到的情况下返回-1

var nums = [1, 2, 3, 4, 2, 7, 9.5];
console.log(nums.indexOf(2, 3));
// lastindexOf()从数组的末尾开始向前查找

// 封装一个方法实现indexOf的功能
function ArrayIndexOf(arr, value) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === value) {
      return i;
    }
  }
  return -1;
}
